蜂鳴器可以分為兩種,一種是無源蜂鳴器(圖左),另一種是有源蜂鳴器(圖右),通常無源蜂鳴器底部可以直接看到電路板。
無源蜂鳴器可以透過程式修改頻率來發出不同音高,而有源蜂鳴器有內建一個固定的頻率,所以只能發出固定的音高。
在發出聲音的時候會使用tone(輸出腳位,頻率,持續時間(毫秒))函數
#define C 523 //定義音高頻率
#define D 587
#define E 659
#define F 698
#define G 784
#define A 880
const byte Speak=11;
const int DELAY=300;
//宣告一個常數int陣列用來存每個音的音高
const int P[]={C,C,G,G,A,A,G,F,F,E,E,D,D,C,G,G,F,F,E,E,D,G,G,F,F,E,E,D,C,C,G,G,A,A,G,F,F,E,E,D,D,C};
//宣告一個常數int陣列用來存每個音的拍子
const int L[]={1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2};
int i;
int j=sizeof(P)/2;//sizeof()函數會回傳有多少個byte,而在Arduino中,一個int是2Byte,因此除以2就能得知整首歌有多少個音符
void setup() {
pinMode(Speak,OUTPUT);
}
void loop() {
for(i=0;i<j;i++){
tone(Speak,P[i],DELAY*L[i]-20);
delay(DELAY*L[i]);//在執行tone()的時候程式還會繼續執行,因此要放一個delay來暫停
}
}
音高頻率表(取自維基百科)